package com.wh1200.mybatis.xmlless.annotations

import com.wh1200.mybatis.xmlless.enums.QueryType


/**
 * 用在mapper的方法上面，解析sql时不再使用方法名而使用此别名，这样方法名可以更具语义化
 * Created by 吴昊 on 2018/12/11.
 *
 * @author 吴昊
 * @since 0.0.2
 * @param conditions 为了防止条件过多导致name过长，将name中的条件用多个表达式分开表示，条件之间是and的关系，即
 *        name="findBy", conditions=["name like","age >="]，等同于解析名称为findByAndNameLikeAndAgeGte
 * @param groupBy 分组属性
 * @param sortBy 排序属性，例如 createTime desc
 * @param limit 分页属性，例如 0,10
 * @param whereAppend 将添加在<where></where>标签内的内容后面
 * @param joinAppend 将添加在最后一个join on的表达式后面，如果没有其他join on，则添加在 from table后面
 * @param scriptAppend 将添加在<script></script>内的内容的最后面
 */
@Target(
    allowedTargets = [
      AnnotationTarget.FUNCTION
    ]
)
annotation class XmllessMethod(
    val type: QueryType = QueryType.None,
    val conditions: Array<String> = [],
    val joins: Array<String> = [],
    val groupBy: Array<String> = [],
    val sortBy: Array<String> = [],
    val updateSet: Array<String> = [],
    val whereAppend: String = "",
    val joinAppend: String = "",
    val scriptAppend: String = "",
    val limit: String = "",
    val includes: Array<String> = [],
    val excludes: Array<String> = []
)
